我潛入他的主機時,原本只是想列一下權限。
但當我打下這行指令:
gc (Get-PSReadLineOption).HistorySavePath
我的心跳居然加快了。
歷史紀錄一行行出現在眼前──
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://www.powershellgallery.com/packages/MrAToolbox/1.0.1/Content/Get-IISSite.ps1'))
. .\Get-IISsite.ps1
Get-IISsite -Server CTF-BOY -web "Default Web Site"
wevtutil qe Application "/q:*[Application [(EventID=3005)]]" /f:text /rd:true /u:CTF-BOY\administrator /p:ReadMyMemory!
這些指令明明是機敏資訊,卻毫無保留地,躺在那裡。
而最後一行,是他故意打的──
# 給今天剛上線的新手紅隊用,希望她可以順利找到方向 :)
我愣住了。
不是他忘了刪,是他「留著的」。
留給某個還在迷路的新手紅隊,留給那個不知道該從哪開始的我。
這不是疏忽,是他的溫柔。
從 PowerShell 5.0
開始(也就是 Windows 10 後的版本),系統會自動把你輸入過的每一行指令,儲存在一個叫做:
ConsoleHost_history.txt
的檔案裡。
這個檔案位置預設在:
C:\Users\<username>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
你可以用這行指令確認目前的歷史儲存路徑:
(Get-PSReadLineOption).HistorySavePath
因為這個檔案會留下所有使用者「互動輸入」的指令──
不管成功還是失敗 ...
不管只是測試還是遺忘 (?)
甚至連註解只要你按了 Enter,也會被記下
不小心出現的明文密碼
wevtutil /u:CTF-BOY\administrator /p:ReadMyMemory!
下載遠端腳本
iex ((New-Object Net.WebClient).DownloadString('http://...'))
任何未被清理的痕跡
只要是你輸入過的,它都有機會還躺在那裡──包含情緒、習慣,甚至是一句註解:
# 給今天剛上線的新手紅隊用,希望她可以順利找到方向 :)
# 我以為自己只是 enumerate 一段記錄,
# 卻不小心 enumerate 到你的習慣、你的心事。
# 你留的不是密碼,是一段我可以 trace 的連線。
# 真希望這一切只有我可以 trace。